#include <RCSwitch.h>
 
#define COMANDO_DESLIGAR   1        // Identificaçao do comando desligar
#define COMANDO_LIGAR      2        // Identificaçao do comando ligar
#define COMANDO_MOVIMENTO  3        // Identificaçao do comando de movimentos
#define PULSO_LIGAR        256      // Valor de identificaçao de pulso para o comando ligar
#define PULSO_DESLIGAR     512      // Valor de identificaçao de pulso para o comando desligar

// instacia a Biblioteca RF 
RCSwitch rcs;

// comandos e parametros de leitura da serial
int comando, parametro1, parametro2;
long pulso;

// realiza a leitura do comando pendente na porta serial
void lerComando()
{ 
  int disponiveis = Serial.available(); 
  if (disponiveis > 0) {
    comando = Serial.read();
    Serial.println("Comando recebido");
    if (disponiveis > 1) {
      parametro1 = Serial.read();
      if (disponiveis > 2) {
        parametro2 = Serial.read();
      }
    }
  }
  
  if(comando == COMANDO_DESLIGAR){
    rcs.send(PULSO_DESLIGAR, 24);
    Serial.println("Desligando drone");
  }
  
  if(comando == COMANDO_LIGAR){
    rcs.send(PULSO_LIGAR, 24);
    Serial.println("Ligando drone");
  }
  
  if(comando == COMANDO_MOVIMENTO){
    enviarComando();
  }
}

// funçao que envia o pulso
void enviarRC(long pulso) {
  rcs.send(pulso, 24);
}

// funçao que junta os parametros de movimentos UP e DOWN em um unico pulso
void enviarComando() {
  Serial.print("cmd_UP: ");
  Serial.println(parametro1);
  Serial.print("cmd_DOWN: ");
  Serial.println(parametro2);
  
  pulso = parametro1;
  pulso = pulso << (sizeof(long)/2*8);
  pulso = pulso | parametro2;
  
  Serial.print("Pulso: ");
  Serial.println(pulso);
  
  enviarRC(pulso);
}

void setup() {
 Serial.begin(9600); 
  
 rcs = RCSwitch();
 // habilita pino 12 para envio  
 rcs.enableTransmit(12);
}

void loop() {
  lerComando();
}
